/*
页面加载的时候
   1.从缓存中获取购物车数据，渲染到页面中
     这些数据商品 checked必须=true
微信支付
   1. 那些人 那些账号 可以实现微信支付
      1. 必须要企业账号appid
      2. 企业账号的小程序后天中 必须给开发者 添加上白名单
         1.一个appid 可以 同时绑定多个开发者
         2.这些开发者就可以共用这个appid 和 它的开发权限
支付按钮 
   1.先判断缓存中有没有token
   2.没有 跳转到授权页面 进行获取token
   3 有token 就正常走下一步
   4.创建订单 获取订单编号
   5.微信支付
   6.手动删除缓存中 已经被选中购买的商品
   7.删除后的购物车数据 重新设置回缓存中
   8.再跳转页面

*/

// 引入发送请求的封装方法
import { request } from '../../request/index';
//引入封装的api功能函数
import { requestPayment,showToast } from "../../utils/asyncWx.js";
Page({
  data: {
    address: {}, //收货地址数据
    cart: [], //购物车数据
    totalPrice: 0, //总价格
    totalNum: 0 // 总数量
  },
   
  //页面出现在前台时执行
  onShow() {
    // 1. 获取缓存中的收货地址数据
    const address = wx.getStorageSync("address");
    // 2. 获取缓存中的购物车数据 没有数据时转成数组 （因为没有数据是空对象，全选需要数组）
    let cart = wx.getStorageSync("cart") || [];
    // 3. 过滤后的购物车数组 （需要checked为true的商品）
    cart = cart.filter(v=>v.checked); 
    // 4.收货地址设置回data中
    this.setData({
      address
    });
    // 计算 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
        totalPrice += v.goods_price * v.num;
        totalNum += v.num;
    });
    this.setData({ //把购物车数据重新设置回data中
      cart,
      totalPrice,
      totalNum,
      address
    })
  },

  //点击支付
  async handleOrderPay(){
    try {
      // 1.判断缓存中有没有token （先从缓存中获取token出来）
      const token = wx.getStorageSync("token");
      // 2.判断是否有token
      if (!token) {
        wx.navigateTo({    //没有就跳去授权页面
          url: '/pages/auth/index',
        });
        return;
      }
      // 3.创建订单
      //   准备 请求头参数（用户登录成功获取的token值）
      // const haeder = {Authorization: token};
      //   准备 请求体参数 (order_price订单总价格、consignee_addr收货地址、goods订单数组: goods_id商品id、goods_number购买的数量、goods_price单价)
      const order_price  = this.totalPrice;
      const consignee_addr = this.address;
      let goods = [];   //存储需要的参数数据
      cart.forEach(v=>goods.push({
          goods_id:v.goods_id,
          goods_number:v.num,
          goods_price:v.goods_price
      }));
      // 4.准备发送请求 创建订单 获取订单编号
      //   封装请求参数
      const orderParams = {
        order_price,consignee_addr,goods
      };
      const { order_number } = await request({    //解构获取到订单编号
        url: "/my/orders/create",
        method: "POST",
        data: orderParams,
        // haeder: haeder
      });
      // 5.发起请求 预支付接口 （请求头参数：token值， 请求体参数：订单编号）
      const { pay } = await request({
        url: "/my/orders/req_unifiedorder",
        method: "POST",
        data: {order_number},
        // haeder: haeder
      });
      // 6.发起微信支付
      await requestPayment(pay);
      // 7.查看后台 订单支付状态 (成功)
      await request({
        url: "/my/orders/chkOrder",
        method: "POST",
        data: {order_number},
        // haeder: haeder
      });
      // 8.支付成功后，弹窗提示
      await showToast({
        title: '支付成功'
      });
      // 9.支付成功后，跳转到订单页面
      wx.navigateTo({
        url: '/pages/order/index'
      });
      // 10.手动删除缓存中 已经支付了的商品
      let newCart = wx.getStorageSync("cart");
      newCart = newCart.filter(v=>!v.checked);  //过滤掉已经购买的商品数据
      wx.setStorageSync("cart", newCart);   //把未过滤的就是未购买的数据 设置回缓存中 渲染

    } catch (error) {
      // 9.支付失败，弹窗提示
      await showToast({
        title: '支付失败'
      })
      console.log(error);
    } 


  }

})